package com.example.rocketmqdemo.transaction.domain.transactionexecutor;

import java.util.Optional;

public interface LocalTransactionExecutor<R> {

    /**
     * 执行本地事务
     *
     * @param txId    事务消息的事务ID
     * @param message 消息对象
     */
    void execute(Object txId, Object message);

    /**
     * 添加本地事务记录，供RocketMQ事务消息回查
     *
     * @param runnable 添加本地事务记录逻辑封装
     */
    void addLocalTransactionRecord(Runnable runnable);

    R getResult();

    default Optional<R> getResultOptional() {
        return Optional.ofNullable(getResult());
    }
}
